package vistas.ui;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;


public class VentanaPrincipal extends JFrame{
	
	// ATRIBUTOS
	
	private static VentanaPrincipal instancia = null;
	
	// ATRIBUTOS - componentes
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JDesktopPane desktop;
	private JMenuBar menuBar;
	
	// elementos menu Cliente
	private JMenu menuCliente;
	private JMenuItem agregarCliente, borrarCliente, modificarCliente, agregarCategoria, modificarCategoria, borrarCategoria;
	
	// elementos menu Presupuesto
	private JMenu menuPresupuesto;
	private JMenuItem generarPresupuesto;
	
	// elementos del menu Agenda
	private JMenu menuAgenda;
	private JMenuItem verAgenda, modificarCita, borrarCita;
	
	
	// elementos del menu Informe de Servicio Tecnico
	private JMenu menuIST;
	private JMenuItem buscarIST;
	
	// elementos del menu Facturas
	private JMenu menuFacturas;
	private JMenuItem buscarFacturas;
	
	// elementos del menu Reportes
	private JMenu menuReportes;
	private JMenuItem reporte1, reporte2, reporte3, reporte4, reporte5;
	
	// elementos del menu Ayuda
	private JMenu menuAyuda;
	private JMenuItem about, configSrvDB;
	
	
	// CONSTRUCTOR - levanta la interfaz
	
	public VentanaPrincipal(){
		
		super();
	
		// Caracteristicas de la ventana - Propiedades
		this.setTitle("Ventana de pruebas");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

		// Caracteristicas de la ventana - Tamano y posicion OPCION 1
		Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
		int anchoPantalla = pantalla.width;
		int altoPantalla = pantalla.height;
		double porcentajeAncho = 0.80;
		double porcentajeAlto = 0.80;
		this.setSize((int)(anchoPantalla*porcentajeAncho), (int)(altoPantalla*porcentajeAlto)); 
		setLocationRelativeTo(null);
		
		
		// Caracteristicas de la ventana - Tamano y posicion OPCION 2
		/*
		setExtendedState(MAXIMIZED_BOTH);
		setLocationRelativeTo(null);
		*/
		
		// Inicializo elementos de la ventana
		menuBar = new JMenuBar();
		desktop = new JDesktopPane();
		
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu Cliente
		menuCliente = new JMenu("Cliente");
		agregarCliente = new JMenuItem("Agregar cliente");
		modificarCliente = new JMenuItem("Modificar datos cliente");
		borrarCliente = new JMenuItem("Borrar datos cliente");
		agregarCategoria = new JMenuItem ("Nueva Categoria");
		modificarCategoria = new JMenuItem ("Modif categoria");
		borrarCategoria = new JMenuItem("bajar categoria");
				
		// Agrego los items al menu Cliente
		menuCliente.add(agregarCliente);
		menuCliente.add(modificarCliente);
		menuCliente.add(borrarCliente);
		menuCliente.add(new JSeparator());
		menuCliente.add(agregarCategoria);
		menuCliente.add(modificarCategoria);
		menuCliente.add(borrarCategoria);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu presupuesto
		menuPresupuesto = new JMenu("Presupuesto");
		generarPresupuesto = new JMenuItem("Generar nuevo");
		
		// Agrego los items al menu presupuesto
		menuPresupuesto.add(generarPresupuesto);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu agenda
		menuAgenda = new JMenu("Agenda");
		verAgenda = new JMenuItem("Ver");
		modificarCita = new JMenuItem("Modificar cita");
		borrarCita = new JMenuItem("Borrar cita");
		
		// Agrego los items al menu agenda
		menuAgenda.add(verAgenda);
		menuAgenda.add(modificarCita);
		menuAgenda.add(borrarCita);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu Informe de Servicio Tecnico
		menuIST = new JMenu("Informes de servicio tecnico");
		buscarIST = new JMenuItem("Buscar IST");
		
		// Agrego los items al menu IST
		menuIST.add(buscarIST);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu facturas
		menuFacturas = new JMenu("Facturacion");
		buscarFacturas = new JMenuItem("Buscar factura");
		
		// Agrego los items al menu facturas
		menuFacturas.add(buscarFacturas);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu Reportes
		menuReportes = new JMenu("Reportes");
		reporte1 = new JMenuItem("reporte1");
		reporte2 = new JMenuItem("reporte2");
		reporte3 = new JMenuItem("reporte3");
		reporte4 = new JMenuItem("reporte4");
		reporte5 = new JMenuItem("reporte5");
		
		// Agregor los items al menu reportes
		menuReportes.add(reporte1);
		menuReportes.add(reporte2);
		menuReportes.add(reporte3);
		menuReportes.add(reporte4);
		menuReportes.add(reporte5);
		
		/*---------------------------------------------------------------------*/
		
		// Inicializo los elementos del menu Ayuda
		menuAyuda = new JMenu("Ayuda");
		about = new JMenuItem("about");
		configSrvDB = new JMenuItem ("Configuraciones");
		
		// Agregor los items al menu reportes
		menuAyuda.add(configSrvDB);
		menuAyuda.add(about);
		
		/*---------------------------------------------------------------------*/
		
		// Agrego los menus a la barra de menus
		menuBar.add(menuCliente);
		menuBar.add(menuFacturas);
		menuBar.add(menuIST);
		menuBar.add(menuPresupuesto);
		menuBar.add(menuReportes);
		menuBar.add(menuAgenda);
		menuBar.add(menuAyuda);
		
		// Configuracion y ubicacion de los elementos en la pantalla
		setJMenuBar(menuBar);
		setContentPane(desktop);

		
		// Manejo de los eventos
		agregarCliente.addActionListener(new ActionListener() 
		{			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new AgregarClienteFrame());
			}
		});
		
		agregarCategoria.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new AgregarCategoriaFrame());
			}
		});
		
		borrarCategoria.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				desktop.add(new BorrarCategoriaFrame());
			}
		});
		
		modificarCategoria.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new ModificarCategoriaFrame());
			}
		});
		
		borrarCliente.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				desktop.add(new BorrarClienteFrame());
			}
		});
		
		modificarCliente.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new ModificarClienteFrame());
			}
		});
		
		generarPresupuesto.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new GenerarPresupuestoFrame());
			}
		});
		
		about.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				desktop.add(new AboutFrame());
			}
		});

		desktop.setBorder(new ImagenFondo());
	}
	
	// METODOS
	
	public static VentanaPrincipal obtenerInstancia()
    {
            if (instancia == null)
            {
                    instancia = new VentanaPrincipal();
            }
            return instancia;
    }
	
	public JDesktopPane getDesktop(){
		return this.desktop;
	}
}